package com.youlai.boot.modules.game.converter;

import com.youlai.boot.modules.game.model.entity.GameInfo;
import com.youlai.boot.modules.game.model.entity.GameTag;
import com.youlai.boot.modules.game.model.form.GameInfoForm;
import com.youlai.boot.modules.game.model.vo.GameInfoVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 游戏信息转换器
 *
 * @author 有来技术团队
 */
@Mapper(componentModel = "spring")
public interface GameInfoConverter {

    /**
     * 表单转实体
     *
     * @param form 表单
     * @return 实体
     */
    @Mapping(target = "new_", source = "newGame") 
    @Mapping(target = "screenshots.gameId", ignore = true)
    @Mapping(target = "screenshots.createTime", ignore = true)
    @Mapping(target = "createTime", ignore = true)
    @Mapping(target = "updateTime", ignore = true)
    @Mapping(target = "tags", ignore = true)
    @Mapping(target = "categoryInfo", ignore = true)
    GameInfo form2Entity(GameInfoForm form);

    /**
     * 实体转VO
     *
     * @param entity 实体
     * @return VO
     */
    @Mapping(target = "newGame", source = "new_")
    GameInfoVO entity2vo(GameInfo entity);

    /**
     * 实体列表转VO列表
     *
     * @param entities 实体列表
     * @return VO列表
     */
    List<GameInfoVO> entityList2voList(List<GameInfo> entities);
    
    /**
     * 将字符串标签转换为GameTag列表
     *
     * @param tagString 标签字符串，以逗号分隔
     * @return GameTag列表
     */
    default List<GameTag> map(String tagString) {
        if (tagString == null || tagString.isEmpty()) {
            return new ArrayList<>();
        }
        
        return Arrays.stream(tagString.split(","))
                .filter(tag -> !tag.trim().isEmpty())
                .map(tag -> {
                    GameTag gameTag = new GameTag();
                    gameTag.setName(tag.trim());
                    return gameTag;
                })
                .collect(Collectors.toList());
    }
} 